#!/bin/bash
#######################################################
# Author: liangliangSu
# Created Time: 2023-11-09 14:50
# Email: sll917@outlook.com
# Version: V1.0
# File Name: 71调试脚本.sh
#######################################################
echo '(1)------------------完美分割线---------------------'
# 调试功能是每一种编程语言都应该实现的重要特性之一，当出现一些始料未及的情况时，用
# 它来生成脚本运行信息。调试信息可以帮你弄清楚是什么原因使得程序发生崩溃或行为异常。每
# 位系统程序员都应该了解Bash提供的调试选项。

# 1 实战演练
# 我们可以利用Bash内建的调试工具，或者按照易于调试的方式编写脚本，方法如下所示。
# (1) 使用选项–x，启用shell脚本的跟踪调试功能：
# $ bash -x script.sh
# 运行带有-x标志的脚本可以打印出所执行的每一行命令以及当前状态.

# (2) 使用set -x和set +x对脚本进行部分调试。例如：
for i in {1..6}; do
	set -x
	echo $i
	set +x
done
echo "Script executed"
# 在上面的脚本中，只会打印出echo $i的调试信息，因为使用了-x和+x对调试区域进行了限制。

echo '(2)------------------完美分割线---------------------'
#(3) 前面介绍的调试手段是Bash内建的。它们通常以固定的格式生成调试信息。但是在很多情况下，
#我们需要以自定义格式显示调试信息。这可以通过传递 _DEBUG环境变量来建立这类调试风看下面的代码：
function DEBUG() {
	[ "$_DEBUG" == "on" ] && $@ || :
}
for i in {1..10}; do
	DEBUG echo $i
done

# 可以将调试功能置为"on"来运行上面的脚本：
# $ _DEBUG=on ./script.sh
# 我们在每一个需要打印调试信息的语句前加上DEBUG。如果没有把 _DEBUG=on传递给脚本，
# 那么调试信息就不会打印出来。在Bash中，命令“:”告诉shell不要进行任何操作。
# 2 工作原理
# -x标识将脚本中执行过的每一行都输出到stdout。不过，我们也可能只关注脚本某些部分
# 的命令及参数的打印输出。针对这种情况，可以在脚本中使用set builtin来启用或禁止调试
# 打印。
# set –x：在执行时显示参数和命令。
# set +x：禁止调试。
# set –v：当命令进行读取时显示输入。
# set +v：禁止打印输入。

